package br.com.cnpv.modelo.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="veiculo")
@NamedQueries(
		{ 
			@NamedQuery(name="Veiculo.buscarByPlaca", query="select v from Veiculo v left join fetch v.veiculoCliente vc left join fetch vc.cliente c where v.placa = :clausula"),
			@NamedQuery(name="Veiculo.buscarByChassi", query="select v from Veiculo v left join fetch v.veiculoCliente vc left join fetch vc.cliente c where v.chassi = :clausula"),
			@NamedQuery(name="Veiculo.buscarByCliente", query="select v from Veiculo v left join fetch v.veiculoCliente vc left join fetch vc.cliente c where c.nome like :clausula"),
			@NamedQuery(name="Veiculo.listar", query="select v from Veiculo v left join fetch v.veiculoCliente vc left join fetch vc.cliente c order by placa ")
		}
	)
public class Veiculo {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id")
	private Integer id;
	
	@Column(name="id_modelo")
	private Integer idModelo;
	
	@Column(name="id_uf_placa")
	private Integer idUfPlaca;
	
	@Column(name="id_combustivel")
	private Integer idCombustivel;
	
	@Column(name="id_tipo_veiculo")
	private Integer idTipoVeiculo;
	
	@Column(name="id_usuario")
	private Integer idUsuario;
	
	@Column(name="tipo_pintura_id")
	private Integer tipoPinturaId;
	
	@Column(name="placa")
	private String placa;
	
	@Column(name="chassi")
	private String chassi;

	@Column(name="renavam")
	private String renavam;
	
	@Column(name="cor")
	private String cor;
	
	@Column(name="ano_fabricacao")
	private Integer anoFabricacao;
	
	@Column(name="modelo_fabricacao")
	private Integer modeloFabricacao;
	
	@Column(name="valor_seguro")
	private Double valorSeguro;
	
	@Column(name="valor_franquia")
	private Double valorFranquia;
	
	@Column(name="dt_incl")
	private Date dtIncl;
	
	@Column(name="dt_alter")
	private Date dtAlter;
	
	@Column(name="dt_inat")
	private Date dtInat;
	
	@Column(name="km")
	private Integer km;
	
	@Column(name="observacao")
	private String observacao;
	
	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="id", insertable=false, updatable=false, referencedColumnName="id_veiculo")
	private VeiculoCliente veiculoCliente;

	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="id_tipo_veiculo", insertable=false, updatable=false, referencedColumnName="id")
	private TipoVeiculo tipoVeiculo;
	
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getIdModelo() {
		return idModelo;
	}

	public void setIdModelo(Integer idModelo) {
		this.idModelo = idModelo;
	}

	public Integer getIdUfPlaca() {
		return idUfPlaca;
	}

	public void setIdUfPlaca(Integer idUfPlaca) {
		this.idUfPlaca = idUfPlaca;
	}

	public Integer getIdCombustivel() {
		return idCombustivel;
	}

	public void setIdCombustivel(Integer idCombustivel) {
		this.idCombustivel = idCombustivel;
	}

	public Integer getIdTipoVeiculo() {
		return idTipoVeiculo;
	}

	public void setIdTipoVeiculo(Integer idTipoVeiculo) {
		this.idTipoVeiculo = idTipoVeiculo;
	}

	public Integer getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(Integer idUsuario) {
		this.idUsuario = idUsuario;
	}

	public Integer getTipoPinturaId() {
		return tipoPinturaId;
	}

	public void setTipoPinturaId(Integer tipoPinturaId) {
		this.tipoPinturaId = tipoPinturaId;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public String getChassi() {
		return chassi;
	}

	public void setChassi(String chassi) {
		this.chassi = chassi;
	}

	public String getRenavam() {
		return renavam;
	}

	public void setRenavam(String renavam) {
		this.renavam = renavam;
	}

	public String getCor() {
		return cor;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	public Integer getAnoFabricacao() {
		return anoFabricacao;
	}

	public void setAnoFabricacao(Integer anoFabricacao) {
		this.anoFabricacao = anoFabricacao;
	}

	public Integer getModeloFabricacao() {
		return modeloFabricacao;
	}

	public void setModeloFabricacao(Integer modeloFabricacao) {
		this.modeloFabricacao = modeloFabricacao;
	}

	public Double getValorSeguro() {
		return valorSeguro;
	}

	public void setValorSeguro(Double valorSeguro) {
		this.valorSeguro = valorSeguro;
	}

	public Double getValorFranquia() {
		return valorFranquia;
	}

	public void setValorFranquia(Double valorFranquia) {
		this.valorFranquia = valorFranquia;
	}

	public Date getDtIncl() {
		return dtIncl;
	}

	public void setDtIncl(Date dtIncl) {
		this.dtIncl = dtIncl;
	}

	public Date getDtAlter() {
		return dtAlter;
	}

	public void setDtAlter(Date dtAlter) {
		this.dtAlter = dtAlter;
	}

	public Date getDtInat() {
		return dtInat;
	}

	public void setDtInat(Date dtInat) {
		this.dtInat = dtInat;
	}

	public Integer getKm() {
		return km;
	}

	public void setKm(Integer km) {
		this.km = km;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public VeiculoCliente getVeiculoCliente() {
		return veiculoCliente;
	}

	public void setVeiculoCliente(VeiculoCliente veiculoCliente) {
		this.veiculoCliente = veiculoCliente;
	}

	public TipoVeiculo getTipoVeiculo() {
		return tipoVeiculo;
	}

	public void setTipoVeiculo(TipoVeiculo tipoVeiculo) {
		this.tipoVeiculo = tipoVeiculo;
	}


}